Java 8 এ java.time প্যাকেজ চালু হওয়ার পর থেকে, এটি অনেক উন্নত এবং সঠিক তারিখ এবং সময় সম্পর্কিত কাজ করার উপায় প্রদান করেছে। কিন্তু অনেক পুরনো Java Date/Time API, যেমন java.util.Date, java.util.Calendar, এবং java.text.SimpleDateFormat, এখনও ব্যাপকভাবে ব্যবহৃত হচ্ছে অনেক পুরানো কোডবেসে। তাই Java 8 এর java.time প্যাকেজ এবং ঐ পুরনো API গুলোর মধ্যে কম্প্যাটিবিলিটি নিশ্চিত করার জন্য কিছু গুরুত্বপূর্ণ ব্যবস্থা নেওয়া হয়েছে।
এখানে আলোচনা করা হবে java.time প্যাকেজের Legacy Date/Time API এর সাথে কম্প্যাটিবিলিটি এবং তাদের মধ্যে Conversion কিভাবে করা যায়।
1. java.util.Date থেকে java.time.LocalDate এ কনভার্শন
java.util.Date পুরনো Java Date API এর একটি প্রধান ক্লাস, যা java.time প্যাকেজের LocalDate, LocalDateTime, ZonedDateTime ইত্যাদি ক্লাসে কনভার্ট করা যেতে পারে।
উদাহরণ: Date থেকে LocalDate কনভার্ট করা
import java.util.Date;
import java.time.LocalDate;
import java.time.ZoneId;
public class DateToLocalDateExample {
public static void main(String[] args) {
// Get current date using legacy Date API
Date legacyDate = new Date();
System.out.println("Legacy Date: " + legacyDate);
// Convert legacy Date to LocalDate
LocalDate localDate = legacyDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
System.out.println("Converted LocalDate: " + localDate);
}
}
আউটপুট:
Legacy Date: Mon Dec 23 10:15:32 IST 2024
Converted LocalDate: 2024-12-23
ব্যাখ্যা:
Date.toInstant():java.util.DateএরInstantএ কনভার্ট করা হয়।atZone(ZoneId.systemDefault()): এটি সিস্টেমের লোকাল টাইম জোনে সময় কনভার্ট করে।toLocalDate():LocalDateতে কনভার্ট করে।
2. java.util.Calendar থেকে java.time.LocalDateTime এ কনভার্শন
Calendar ক্লাসটি java.util.Date এর উন্নত সংস্করণ, যা তারিখ এবং সময় সম্পর্কিত আরও উন্নত কার্যকারিতা প্রদান করে। আপনি Calendar থেকে LocalDateTime বা ZonedDateTime তে কনভার্ট করতে পারেন।
উদাহরণ: Calendar থেকে LocalDateTime কনভার্ট করা
import java.util.Calendar;
import java.time.LocalDateTime;
import java.time.ZoneId;
public class CalendarToLocalDateTimeExample {
public static void main(String[] args) {
// Get current calendar instance
Calendar calendar = Calendar.getInstance();
System.out.println("Legacy Calendar: " + calendar.getTime());
// Convert Calendar to LocalDateTime
LocalDateTime localDateTime = calendar.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
System.out.println("Converted LocalDateTime: " + localDateTime);
}
}
আউটপুট:
Legacy Calendar: Mon Dec 23 10:15:32 IST 2024
Converted LocalDateTime: 2024-12-23T10:15:32.123
ব্যাখ্যা:
Calendar.toInstant():Calendarঅবজেক্টকেInstantএ কনভার্ট করে।atZone(ZoneId.systemDefault()): সিস্টেমের লোকাল টাইম জোনে কনভার্ট করে।toLocalDateTime():LocalDateTimeতে কনভার্ট করে।
3. java.text.SimpleDateFormat থেকে java.time.format.DateTimeFormatter এ কনভার্শন
SimpleDateFormat পুরনো Java এর Date/Time Formatting এর জন্য ব্যবহৃত হয়। আপনি SimpleDateFormat এর সাহায্যে ফরম্যাটেড তারিখ পেলে, সেই তারিখটি DateTimeFormatter এর মাধ্যমে LocalDate, LocalDateTime, ZonedDateTime ইত্যাদি ক্লাসে কনভার্ট করতে পারেন।
উদাহরণ: SimpleDateFormat থেকে DateTimeFormatter তে কনভার্ট করা
import java.text.SimpleDateFormat;
import java.util.Date;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class SimpleDateFormatToDateTimeFormatterExample {
public static void main(String[] args) throws Exception {
// Use SimpleDateFormat to parse a date string
String dateStr = "2024-12-23 10:15:32";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = simpleDateFormat.parse(dateStr);
System.out.println("Legacy Date: " + date);
// Convert Date to LocalDateTime using DateTimeFormatter
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.parse(dateStr, formatter);
System.out.println("Converted LocalDateTime: " + localDateTime);
}
}
আউটপুট:
Legacy Date: Mon Dec 23 10:15:32 IST 2024
Converted LocalDateTime: 2024-12-23T10:15:32
ব্যাখ্যা:
SimpleDateFormat.parse(): এটিStringথেকেDateঅবজেক্ট তৈরি করে।DateTimeFormatter.ofPattern(): এটি একটিDateTimeFormatterতৈরি করে।LocalDateTime.parse(): এটি ফরম্যাটেড তারিখের স্ট্রিং থেকেLocalDateTimeঅবজেক্ট তৈরি করে।
4. Compatibility Between java.time and Legacy APIs
java.time এবং পুরনো java.util.Date, java.util.Calendar এর মধ্যে কম্প্যাটিবিলিটি অনেক সহজ। আপনি Instant, LocalDateTime, বা ZonedDateTime এর মাধ্যমে সময় সম্পর্কিত মানকে Date অথবা Calendar এর মধ্যে কনভার্ট করতে পারেন।
Legacy Date to Instant Conversion:
import java.time.Instant;
import java.util.Date;
public class LegacyDateToInstant {
public static void main(String[] args) {
Date legacyDate = new Date(); // Legacy Date object
Instant instant = legacyDate.toInstant(); // Convert Date to Instant
System.out.println("Instant: " + instant);
}
}
Legacy Calendar to ZonedDateTime Conversion:
import java.util.Calendar;
import java.time.ZonedDateTime;
import java.time.ZoneId;
public class LegacyCalendarToZonedDateTime {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance(); // Legacy Calendar object
ZonedDateTime zonedDateTime = calendar.toInstant().atZone(ZoneId.systemDefault()); // Convert to ZonedDateTime
System.out.println("ZonedDateTime: " + zonedDateTime);
}
}
java.timeপ্যাকেজেরInstant,LocalDateTime, এবংZonedDateTimeনতুন APIs আপনাকে আধুনিক এবং সঠিকভাবে তারিখ ও সময় ম্যানিপুলেট করার উপায় প্রদান করে।- পুরনো
java.util.Date,java.util.CalendarএবংSimpleDateFormatএর সাথে কম্প্যাটিবিলিটি বজায় রেখে আপনি সেগুলিjava.timeAPIs এ কনভার্ট করে সহজেই ব্যবহার করতে পারেন। java.timeপ্যাকেজের সাহায্যে তারিখ এবং সময় সম্পর্কিত কাজ আরও সঠিক, পরিস্কার এবং কার্যকরী হয়।
Java 8-এ java.time প্যাকেজের অন্তর্ভুক্তির মাধ্যমে LocalDate, LocalTime, ZonedDateTime, Instant এবং DateTimeFormatter এর মতো নতুন API প্রদান করা হয়েছে, যা টাইম এবং তারিখের কাজের জন্য অনেক শক্তিশালী এবং কার্যকরী। এর আগে java.util.Date এবং java.util.Calendar ছিল Java-তে তারিখ এবং সময় পরিচালনার জন্য প্রধান API। তবে, এই পুরনো ক্লাসগুলো অনেক সীমাবদ্ধতা এবং জটিলতা নিয়ে আসে, যার ফলে Java 8 এর পর java.time প্যাকেজটি একটি অত্যন্ত উন্নত এবং সহজ API প্রদান করে।
java.util.Date এবং java.util.Calendar এর সীমাবদ্ধতা:
java.util.Dateক্লাসটি নিজে mutable (পরিবর্তনযোগ্য) হওয়ার কারণে স্ট্রিংয়ের মতো একে সরাসরি ব্যবহার করা কঠিন এবং টাইমজোন ম্যানেজমেন্টে সমস্যা সৃষ্টি করতে পারে।java.util.Calendarক্লাসটি অত্যন্ত জটিল এবং এতে অনেক অপ্রয়োজনীয় মেথড ছিল।java.util.Dateএবংjava.util.Calendarটাইমজোন ম্যানেজমেন্টের জন্য উপযুক্ত নয়, এবং তারা সঠিক সময় প্রক্রিয়াকরণের জন্য নির্ভরযোগ্য নয়।
Java 8 এর নতুন API: java.time প্যাকেজ
LocalDate,LocalTime,ZonedDateTime,Instant,DateTimeFormatterএবংClockপ্রভৃতি নতুন ক্লাসগুলির মাধ্যমে immutable (অপরিবর্তনযোগ্য) টাইম অবজেক্ট তৈরি করা যায়, যা অনেক বেশি কার্যকরী এবং নির্ভরযোগ্য।
java.util.Date এবং java.util.Calendar কে নতুন API তে রূপান্তর করার জন্য মেথড:
1. java.util.Date থেকে java.time.LocalDate অথবা java.time.Instant এ রূপান্তর
java.util.Date একটি পুরনো টাইম API, এবং Instant একটি নতুন API যা সময়কে UTC টাইমজোনে epoch second হিসেবে প্রতিনিধিত্ব করে।
java.util.Date থেকে Instant এ রূপান্তর:
import java.util.Date;
import java.time.Instant;
public class DateToInstantExample {
public static void main(String[] args) {
// Get current date using java.util.Date
Date oldDate = new Date();
System.out.println("Old Date (java.util.Date): " + oldDate);
// Convert java.util.Date to Instant
Instant instant = oldDate.toInstant();
System.out.println("Converted Instant: " + instant);
}
}
Output:
Old Date (java.util.Date): Mon Dec 23 10:30:15 IST 2024
Converted Instant: 2024-12-23T05:00:15Z
ব্যাখ্যা:
toInstant()মেথডটিjava.util.Dateঅবজেক্ট থেকেInstantতৈরি করে। এখানে,InstantUTC টাইমজোনে সময়কে প্রতিনিধিত্ব করে, যা পৃথিবীর সকল অঞ্চলের জন্য সঠিক।
java.util.Date থেকে LocalDate বা LocalDateTime এ রূপান্তর:
import java.util.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
public class DateToLocalDateExample {
public static void main(String[] args) {
// Get current date using java.util.Date
Date oldDate = new Date();
System.out.println("Old Date (java.util.Date): " + oldDate);
// Convert java.util.Date to LocalDate
LocalDate localDate = oldDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
System.out.println("Converted LocalDate: " + localDate);
// Convert java.util.Date to LocalDateTime
LocalDateTime localDateTime = oldDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
System.out.println("Converted LocalDateTime: " + localDateTime);
}
}
Output:
Old Date (java.util.Date): Mon Dec 23 10:30:15 IST 2024
Converted LocalDate: 2024-12-23
Converted LocalDateTime: 2024-12-23T10:30:15.123
ব্যাখ্যা:
toInstant()মেথড ব্যবহার করেjava.util.DateথেকেInstantতৈরি করা হয়েছে, তারপর.atZone(ZoneId.systemDefault())ব্যবহার করেZonedDateTimeএ রূপান্তর করা হয়েছে এবংtoLocalDate()বাtoLocalDateTime()মেথড ব্যবহার করেLocalDateবাLocalDateTimeএ রূপান্তর করা হয়েছে।
2. java.util.Calendar থেকে java.time.LocalDateTime বা java.time.ZonedDateTime এ রূপান্তর
java.util.Calendar ক্লাসটি পুরনো সময় API, এবং এটি নির্দিষ্ট টাইমজোন ও ক্যালেন্ডার ডেটার হিসাব করতে ব্যবহৃত হয়। তবে এটি immutable নয় এবং টাইমজোনের সাথে কাজ করার ক্ষেত্রে সীমাবদ্ধ।
java.util.Calendar থেকে ZonedDateTime এ রূপান্তর:
import java.util.Calendar;
import java.time.ZonedDateTime;
import java.time.ZoneId;
public class CalendarToZonedDateTimeExample {
public static void main(String[] args) {
// Get current Calendar instance
Calendar calendar = Calendar.getInstance();
System.out.println("Old Calendar Date: " + calendar.getTime());
// Convert Calendar to ZonedDateTime
ZonedDateTime zonedDateTime = calendar.toInstant().atZone(ZoneId.systemDefault());
System.out.println("Converted ZonedDateTime: " + zonedDateTime);
}
}
Output:
Old Calendar Date: Mon Dec 23 10:30:15 IST 2024
Converted ZonedDateTime: 2024-12-23T10:30:15.123+05:30[Asia/Kolkata]
ব্যাখ্যা:
toInstant()মেথড ব্যবহার করেCalendarঅবজেক্ট থেকেInstantতৈরি করা হয়েছে, তারপরatZone(ZoneId.systemDefault())ব্যবহার করেZonedDateTimeএ রূপান্তর করা হয়েছে।
java.util.Calendar থেকে LocalDateTime এ রূপান্তর:
import java.util.Calendar;
import java.time.LocalDateTime;
import java.time.ZoneId;
public class CalendarToLocalDateTimeExample {
public static void main(String[] args) {
// Get current Calendar instance
Calendar calendar = Calendar.getInstance();
System.out.println("Old Calendar Date: " + calendar.getTime());
// Convert Calendar to LocalDateTime
LocalDateTime localDateTime = calendar.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
System.out.println("Converted LocalDateTime: " + localDateTime);
}
}
Output:
Old Calendar Date: Mon Dec 23 10:30:15 IST 2024
Converted LocalDateTime: 2024-12-23T10:30:15.123
ব্যাখ্যা:
toInstant()এবংatZone()ব্যবহার করেCalendarঅবজেক্ট থেকেLocalDateTimeতৈরি করা হয়েছে।
java.util.Dateএবংjava.util.CalendarএরtoInstant()মেথড ব্যবহার করে সহজেই নতুন Java Time API-তে রূপান্তর করা যায়।- নতুন
java.timeAPI তেLocalDate,LocalDateTime,ZonedDateTimeইত্যাদি ক্লাস রয়েছে, যা টাইমজোন ম্যানেজমেন্ট এবং সময়ের অপারেশন সহজতর করে। java.util.Dateএবংjava.util.CalendarথেকেInstantএবংZonedDateTimeতে রূপান্তর করার মাধ্যমে আপনি নতুন API এর সুবিধাগুলি পুরোপুরি উপভোগ করতে পারেন, যেমন immutable objects, time zone handling ইত্যাদি।
এটি Java 8 এর java.time প্যাকেজের মাধ্যমে টাইম এবং তারিখের কাজের প্রক্রিয়া আরো সহজ এবং নির্ভরযোগ্য করে তোলে।
java.util.Date এবং java.time.Instant ক্লাস দুটি Java এর সময় সম্পর্কিত টুলস, কিন্তু এগুলোর মধ্যে কিছু পার্থক্য রয়েছে। java.util.Date ক্লাসটি পুরানো টাইম API এর অংশ, যা UTC (Coordinated Universal Time) থেকে সেকেন্ডে সময়ের একটি নির্দিষ্ট মুহূর্ত প্রতিনিধিত্ব করে, কিন্তু এটি মানবিক ভ্রান্তি এবং সময়সীমার পার্থক্য হিসাব করার ক্ষেত্রে নির্ভুল নয়। অপরদিকে, java.time.Instant ক্লাসটি Java 8 এর অংশ, যা java.time প্যাকেজের আওতায় আসে এবং এটি UTC সময়ের নির্দিষ্ট মুহূর্ত (epoch time) এক সেকেন্ডের নির্ভুলতা সহ প্রতিনিধিত্ব করে।
java.util.Date থেকে Instant এ রূপান্তর
Java 8 এ java.util.Date কে Instant-এ রূপান্তর করা সম্ভব, কারণ Date ক্লাসের মধ্যে একটি toInstant() মেথড রয়েছে যা পুরানো টাইম API কে Java Time API-এর সাথে ইন্টিগ্রেট করতে সাহায্য করে।
java.util.Date থেকে Instant এ রূপান্তর উদাহরণ:
import java.util.Date;
import java.time.Instant;
public class DateToInstantExample {
public static void main(String[] args) {
// Create a Date object (current time)
Date currentDate = new Date();
System.out.println("Current Date: " + currentDate);
// Convert Date to Instant
Instant instant = currentDate.toInstant();
System.out.println("Converted Instant: " + instant);
}
}
আউটপুট:
Current Date: Mon Dec 23 15:45:30 IST 2024
Converted Instant: 2024-12-23T10:15:30Z
ব্যাখ্যা:
Date currentDate = new Date();: এটি বর্তমান তারিখ এবং সময় একটিDateঅবজেক্টে ধারণ করে।toInstant()মেথডটিjava.util.DateথেকেInstantএ রূপান্তর করে, যা UTC সময়ের নির্দিষ্ট মুহূর্ত প্রতিনিধিত্ব করে।
Date থেকে Instant এর মাধ্যমে সময় পরিবর্তন করা:
একটি Date অবজেক্টের Instant অবজেক্টে রূপান্তর করার পর, আপনি Instant এর ওপর বিভিন্ন কাজ যেমন যোগ-বিয়োগ, পার্থক্য বের করা ইত্যাদি করতে পারেন।
উদাহরণ: Instant এ যোগ-বিয়োগ করা
import java.util.Date;
import java.time.Instant;
import java.time.Duration;
public class DateToInstantExample {
public static void main(String[] args) {
// Create a Date object (current time)
Date currentDate = new Date();
System.out.println("Current Date: " + currentDate);
// Convert Date to Instant
Instant instant = currentDate.toInstant();
System.out.println("Converted Instant: " + instant);
// Add 1000 seconds to the Instant
Instant newInstant = instant.plusSeconds(1000);
System.out.println("New Instant (after adding 1000 seconds): " + newInstant);
// Calculate the difference between the current Instant and the new Instant
Duration duration = Duration.between(instant, newInstant);
System.out.println("Difference in seconds: " + duration.getSeconds());
}
}
আউটপুট:
Current Date: Mon Dec 23 15:45:30 IST 2024
Converted Instant: 2024-12-23T10:15:30Z
New Instant (after adding 1000 seconds): 2024-12-23T10:31:10Z
Difference in seconds: 1000
ব্যাখ্যা:
plusSeconds(1000): এখানেInstantঅবজেক্টে 1000 সেকেন্ড যোগ করা হয়েছে, এবং নতুনInstantপাওয়া গেছে।Duration.between(instant, newInstant): আমরাInstantঅবজেক্টের মধ্যে সময়ের পার্থক্য বের করেছি এবং সেকেন্ডে সেটি মাপা হয়েছে।
Instant থেকে Date এ রূপান্তর:
একইভাবে, আপনি Instant কে java.util.Date এ রূপান্তর করতে পারেন:
import java.util.Date;
import java.time.Instant;
public class InstantToDateExample {
public static void main(String[] args) {
// Create an Instant object (current UTC time)
Instant instant = Instant.now();
System.out.println("Current Instant: " + instant);
// Convert Instant to Date
Date date = Date.from(instant);
System.out.println("Converted Date: " + date);
}
}
আউটপুট:
Current Instant: 2024-12-23T10:15:30Z
Converted Date: Mon Dec 23 15:15:30 IST 2024
ব্যাখ্যা:
Date.from(instant): এটিInstantথেকে একটিDateঅবজেক্টে রূপান্তর করে।java.util.DateথেকেInstantরূপান্তর করার জন্যtoInstant()মেথড ব্যবহার করা হয়।Instantহলো UTC (Coordinated Universal Time) সময়ের নির্দিষ্ট মুহূর্ত, যা সেকেন্ড এবং ন্যানোসেকেন্ড নির্ভুল হয়।InstantকেDateবা অন্য যেকোনোjava.timeক্লাসে রূপান্তর করা সহজ এবং এর মাধ্যমে আপনি সময় সম্পর্কিত গণনা (যেমন সময় যোগ বা বিয়োগ, পার্থক্য নির্ধারণ) করতে পারেন।
Java 8-এ java.time প্যাকেজটি টাইম API উন্নত করার জন্য প্রবর্তিত হয়েছিল, এবং এটি পুরানো java.util.Date ক্লাসের তুলনায় আরো নির্ভুল এবং শক্তিশালী।
java.sql.Timestamp হল JDBC (Java Database Connectivity) এর অংশ, যা ডাটাবেসে তারিখ এবং সময় স্টোর করতে ব্যবহৃত হয়। এটি java.util.Date এর একটি subclass এবং LocalDateTime বা ZonedDateTime এ রূপান্তর করা সম্ভব।
যেহেতু Timestamp একটি UTC-এ ভিত্তি করে সময় ধারণ করে, তাই আপনি এটি LocalDateTime বা ZonedDateTime এ রূপান্তর করতে পারেন।
এখানে Timestamp থেকে LocalDateTime বা ZonedDateTime এ রূপান্তর করার উদাহরণ দেখানো হয়েছে:
1. Timestamp থেকে LocalDateTime এ রূপান্তর:
LocalDateTime ক্লাসটি নির্দিষ্ট তারিখ এবং সময় ধারণ করে, তবে এটি কোনো সময় অঞ্চল সম্পর্কিত তথ্য ধারণ করে না। যদি আপনি একটি Timestamp অবজেক্টকে LocalDateTime এ রূপান্তর করতে চান, আপনি toLocalDateTime() মেথড ব্যবহার করতে পারেন।
উদাহরণ: Timestamp থেকে LocalDateTime এ রূপান্তর:
import java.sql.Timestamp;
import java.time.LocalDateTime;
public class TimestampToLocalDateTime {
public static void main(String[] args) {
// Create a Timestamp object (current time)
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
// Convert Timestamp to LocalDateTime
LocalDateTime localDateTime = timestamp.toLocalDateTime();
System.out.println("Timestamp: " + timestamp);
System.out.println("Converted LocalDateTime: " + localDateTime);
}
}
আউটপুট:
Timestamp: 2024-12-23 14:35:20.123
Converted LocalDateTime: 2024-12-23T14:35:20.123
ব্যাখ্যা:
timestamp.toLocalDateTime(): এটিTimestampঅবজেক্টকেLocalDateTimeএ রূপান্তরিত করে, যা তারিখ এবং সময়ের তথ্য ধারণ করে কিন্তু সময় অঞ্চল সম্পর্কিত তথ্য নয়।
2. Timestamp থেকে ZonedDateTime এ রূপান্তর:
ZonedDateTime ক্লাসটি LocalDateTime এর মতো, তবে এটি সময় অঞ্চল (timezone) সম্পর্কিত তথ্য ধারণ করে। Timestamp থেকে ZonedDateTime এ রূপান্তর করতে, প্রথমে Timestamp কে LocalDateTime এ রূপান্তর করতে হবে এবং তারপর তা ZonedDateTime এ কনভার্ট করতে হবে।
উদাহরণ: Timestamp থেকে ZonedDateTime এ রূপান্তর:
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class TimestampToZonedDateTime {
public static void main(String[] args) {
// Create a Timestamp object (current time)
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
// Convert Timestamp to LocalDateTime
LocalDateTime localDateTime = timestamp.toLocalDateTime();
// Convert LocalDateTime to ZonedDateTime with a specific time zone
ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.of("Asia/Kolkata"));
System.out.println("Timestamp: " + timestamp);
System.out.println("Converted ZonedDateTime: " + zonedDateTime);
}
}
আউটপুট:
Timestamp: 2024-12-23 14:35:20.123
Converted ZonedDateTime: 2024-12-23T14:35:20.123+05:30[Asia/Kolkata]
ব্যাখ্যা:
timestamp.toLocalDateTime(): এটিTimestampঅবজেক্টকেLocalDateTimeএ রূপান্তর করে।localDateTime.atZone(ZoneId.of("Asia/Kolkata")): এটিLocalDateTimeকেAsia/Kolkataটাইম জোনেরZonedDateTimeএ রূপান্তরিত করে।
3. Timestamp থেকে UTC ZonedDateTime এ রূপান্তর:
আপনি যদি UTC (Coordinated Universal Time) সময় অঞ্চলে ZonedDateTime রূপান্তর করতে চান, তাহলে আপনি ZoneId.of("UTC") ব্যবহার করতে পারেন।
উদাহরণ: Timestamp থেকে UTC ZonedDateTime এ রূপান্তর:
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class TimestampToUTCZonedDateTime {
public static void main(String[] args) {
// Create a Timestamp object (current time)
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
// Convert Timestamp to LocalDateTime
LocalDateTime localDateTime = timestamp.toLocalDateTime();
// Convert LocalDateTime to ZonedDateTime with UTC time zone
ZonedDateTime zonedDateTimeUTC = localDateTime.atZone(ZoneId.of("UTC"));
System.out.println("Timestamp: " + timestamp);
System.out.println("Converted UTC ZonedDateTime: " + zonedDateTimeUTC);
}
}
আউটপুট:
Timestamp: 2024-12-23 14:35:20.123
Converted UTC ZonedDateTime: 2024-12-23T09:35:20.123Z[UTC]
ব্যাখ্যা:
ZoneId.of("UTC"): এটিZonedDateTimeকে UTC টাইম জোনে রূপান্তর করে, যাZদিয়ে সমাপ্ত হয়।
সারাংশ:
TimestampথেকেLocalDateTimeএ রূপান্তর করতেtoLocalDateTime()মেথড ব্যবহার করুন।TimestampথেকেZonedDateTimeএ রূপান্তর করতে প্রথমেLocalDateTimeএ রূপান্তর করুন এবং তারপর সময় অঞ্চল (যেমনZoneId) নির্ধারণ করুন।ZoneId.of("UTC")ব্যবহার করে আপনি UTC টাইম জোনেZonedDateTimeপেতে পারেন।
এভাবে আপনি Timestamp থেকে LocalDateTime বা ZonedDateTime এ রূপান্তর করতে পারবেন এবং প্রয়োজন অনুসারে বিভিন্ন সময় অঞ্চল বা UTC সময় ব্যবহার করতে পারবেন।
Java Time API (যেমন java.time প্যাকেজ) Java 8 এ আনা হয়েছিল এবং এটি সময় এবং তারিখের জন্য আধুনিক, নিরাপদ, এবং শক্তিশালী API প্রদান করে। তবে, Legacy API, যেমন java.util.Date এবং java.util.Calendar, এখনও প্রচলিত এবং অনেক অ্যাপ্লিকেশন এবং লাইব্রেরিতে ব্যবহৃত হয়। তাই Java Time API এবং Legacy API এর মধ্যে সঙ্গতিপূর্ণতা নিশ্চিত করার জন্য কিছু সমাধান এবং কৌশল দরকার।
Legacy API Compatibility with java.time
Java Time API (java.time প্যাকেজ) নতুন হলেও এটি পুরানো Date এবং Calendar ক্লাসের সাথে সম্পূর্ণ সঙ্গতিপূর্ণ নয়। তবে, Java Time API এর মাধ্যমে Legacy API এর সাথে কাজ করার জন্য কয়েকটি কৌশল রয়েছে, যা সহজে Legacy API এর মানকে LocalDate, LocalDateTime, ZonedDateTime বা অন্যান্য java.time ক্লাসে রূপান্তরিত করে এবং সেগুলিকে পুরানো API এর সাথে মিলিয়ে কাজ করে।
Legacy API এবং java.time এর মধ্যে রূপান্তরের কৌশল:
java.util.DateথেকেLocalDateTimeবাZonedDateTimeএ রূপান্তর:java.util.Dateএকটি সময়ের মাপের স্ট্যান্ডার্ড কৌশল, কিন্তু এটি টাইম জোন সম্পর্কিত কোনো তথ্য ধারণ করে না। তবে, আপনি সহজেইjava.timeপ্যাকেজের ক্লাসে এটিকে রূপান্তর করতে পারেন।CalendarথেকেLocalDateবাLocalDateTimeএ রূপান্তর:Calendarএর একটিgetTime()মেথড রয়েছে যা একটিDateঅবজেক্ট প্রদান করে, তারপর আপনিDateথেকেjava.timeএর অবজেক্টে রূপান্তর করতে পারেন।
উদাহরণ: java.util.Date থেকে LocalDateTime এবং ZonedDateTime এ রূপান্তর
import java.util.*;
import java.time.*;
import java.time.zone.ZoneRulesException;
public class LegacyDateToJavaTime {
public static void main(String[] args) {
// Create a legacy Date object (using java.util.Date)
Date legacyDate = new Date();
System.out.println("Legacy Date: " + legacyDate);
// Convert java.util.Date to java.time.LocalDateTime
LocalDateTime localDateTime = legacyDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
System.out.println("Converted to LocalDateTime: " + localDateTime);
// Convert java.util.Date to java.time.ZonedDateTime
ZonedDateTime zonedDateTime = legacyDate.toInstant().atZone(ZoneId.systemDefault());
System.out.println("Converted to ZonedDateTime: " + zonedDateTime);
}
}
ব্যাখ্যা:
toInstant(): এটিjava.util.Dateঅবজেক্টকে Instant এ রূপান্তরিত করে, যা UTC সময়ের মুহূর্ত নির্দেশ করে।atZone(ZoneId.systemDefault()): এটি Instant থেকে একটি নির্দিষ্ট time zone (এখানেZoneId.systemDefault()ব্যবহার করা হয়েছে) সহZonedDateTimeবাLocalDateTimeতৈরি করে।
আউটপুট:
Legacy Date: Mon Dec 23 15:30:25 IST 2024
Converted to LocalDateTime: 2024-12-23T15:30:25.152
Converted to ZonedDateTime: 2024-12-23T15:30:25.152+05:30[Asia/Kolkata]
উদাহরণ: java.util.Calendar থেকে LocalDateTime এবং ZonedDateTime এ রূপান্তর
import java.util.*;
import java.time.*;
public class CalendarToJavaTime {
public static void main(String[] args) {
// Create a legacy Calendar object
Calendar calendar = Calendar.getInstance();
System.out.println("Legacy Calendar: " + calendar.getTime());
// Convert java.util.Calendar to java.time.LocalDateTime
LocalDateTime localDateTimeFromCalendar = calendar.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
System.out.println("Converted to LocalDateTime: " + localDateTimeFromCalendar);
// Convert java.util.Calendar to java.time.ZonedDateTime
ZonedDateTime zonedDateTimeFromCalendar = calendar.toInstant().atZone(ZoneId.systemDefault());
System.out.println("Converted to ZonedDateTime: " + zonedDateTimeFromCalendar);
}
}
ব্যাখ্যা:
toInstant():CalendarথেকেInstantতৈরি করা হয়েছে, তারপরatZone()ব্যবহার করে তারিখ এবং সময়েরZonedDateTimeবাLocalDateTimeতৈরি করা হয়েছে।
আউটপুট:
Legacy Calendar: Mon Dec 23 15:30:25 IST 2024
Converted to LocalDateTime: 2024-12-23T15:30:25.152
Converted to ZonedDateTime: 2024-12-23T15:30:25.152+05:30[Asia/Kolkata]
Legacy API Compatibility Best Practices:
DateএবংCalendarএর পরিবর্তেjava.timeব্যবহার করুন: Java 8 থেকে নতুনjava.timeAPI ব্যবহার করা শ্রেয় কারণ এটি নিরাপদ, সঠিক এবং অনেক সুবিধা প্রদান করে।- Legacy API কে
java.timeAPI তে রূপান্তর করুন: যখনই সম্ভব, পুরানোDateবাCalendarএর মানকেInstant,ZonedDateTimeবাLocalDateTimeতে রূপান্তর করুন, যাতে টাইম জোন এবং ডেলাইট সেভিংস টাইম এর সুবিধা পেতে পারেন। - ইন্টারফেস এবং লাইব্রেরি নির্মাণের সময়
java.timeব্যবহার করুন: নতুন API তৈরি করার সময়java.timeপ্যাকেজের ক্লাসগুলোই ব্যবহার করুন, এবং পুরানো টাইম API শুধুমাত্র অংশীক রূপে ব্যবহার করুন।
java.util.Dateএবংjava.util.Calendarপুরানো API গুলি, তবে Java 8 থেকে শুরু হওয়াjava.timeAPI বেশি কার্যকরী এবং আধুনিক।- আপনি
java.util.Dateএবংjava.util.Calendarথেকেjava.timeAPI (যেমনLocalDateTime,ZonedDateTime) এ রূপান্তর করতে পারেন এবং সেই API গুলি ব্যবহার করে আরও নির্ভুল এবং শক্তিশালী কাজ করতে পারেন। - Java 8 এর নতুন
java.timeপ্যাকেজটি সহজ, সঠিক এবং time-zone সম্পর্কিত সমস্যাগুলির সমাধান প্রদান করে।
Read more